package collection;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortListDemo2 {
    public static void main(String[] args) {
        List<Point> list=new ArrayList<>();
        list.add(new Point(1,2));
        list.add(new Point(97,88));
        list.add(new Point(7,7));
        list.add(new Point(44,55));
        list.add(new Point(5,4));
        list.add(new Point(2,3));
        System.out.println(list);
        /*
        *
        * Collection.sort(List list )在排序List集合时要求集合元素必须实现了
        * Comparable接口.实现了该接口的类必须重写一个方法compareTo用于定义比较
        * 大小的规则，从而进行元素间的比较后排序。否则编译不通过
        *
        *
        *侵入性：
        * 当我们调用某个Api时，其反过来要求我们为其修改其他额外的代码，这种现象就
        * 成为侵入性。侵入性不利与程序后期的维护，尽可能避免。
        *
        *
        *compare
        * */
       // Collections.sort(list);
//        //匿名内部类的形式创建一个比较器
//        Comparator<Point> com =new Comparable<Point>(){
//            @Override
//            public int compareTo(Point o) {
//                return 0;
//            }
//            /*
//            * 实现比较器接口必须重写方法compare
//            *该方法用来定义参数01与02的比较大小规则
//            *返回值用来表示01与02的大小关系
//            * */
//
//            public int compareTo(Point o1,Point o2){
//               int len1=o1.getX()* o1.getX()+ o1.getY()*o1.getY();
//                int len2=o2.getX()* o2.getX()+ o2.getY()*o2.getY();
//                return len1-len2;
//            }
//        };
//        Collections.sort(list,com);//回调模式
//        System.out.println(list);

            Collections.sort(list,(o1,o2)->

                o1.getX() * o1.getX() + o1.getY() * o1.getY()-
                o2.getX() * o2.getX() - o2.getY() * o2.getY()
        );
        System.out.println(list);





        }
    }

